<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<script>


    /*let、const有没有变量提升？
首先说明，let、const也存在变量提升，不过和var的变量提升不在一个阶段。
var和let、const的区别：
1.var的变量提升，在声明之前可以调用，声明阶段就有的变量提升 ; let 、const存在一个暂时性死区
（暂时性死区：创建了变量但是没有初始化，没法使用变量，“Cannot access 'value' before initialization”）
，只在变量创建阶段有提升，在初始化阶段没有提升，形成的暂时性死区。

2.var 没有块级作用域的概念，如果想搞出来一个保护内部变量的方法，可以使用闭包解决 ；
let、const 有块级作用域的概念，局部作用域内部的大括号‘{}’，被称为块级作用域

3.var 可以重复声明同一个变量，let、const不能，const声明的变量不能直接修改值*/

    console.log(b)    //undefined  变量提升  感觉逻辑有点混乱 新的let不行了  更符合逻辑
    console.log(fn())  //函数提升
    var b=2
    function fn(){
        return 'hello'
    }


    //js 在引入 let const ES6之前没有块级作用域    有 函数作用域 和全局作用域
    // var f 即使在 if中 照样会提升到全局变量

    if(!(f in window)){
       var f=1
    }

    console.log(f)

</script>
</body>
</html>